/** 
 * Project Name:tinysql 
 * File Name:AbstractTinySqlBuilder.java 
 * Package Name:com.wdy.golden.tinysql.plus.builder 
 * Date:2021年4月26日上午10:48:15 
 * 
*/  
package com.wdy.golden.tinysql.plus.builder;

import java.util.List;

import com.wdy.golden.tinysql.extend.ResultColumnArrayList;
import com.wdy.golden.tinysql.plus.annotation.TinyBuilderOperation;

/** 
 * ClassName: ITinySqlBuilder <br/> 
 * Function: 单表CRUD操作，链式编程 <br/> 
 * Reason:   TODO ADD REASON. <br/> 
 * Date:     2021年4月26日 上午10:48:15 <br/> 
 * @author   DongYe_Wu 
 * @version
 * @see       
 */
public interface ITinySqlBuilder<T> {
	
	/**
	 * 
	 * exec:(用于链式方式生成sql语句，针对insert,update,delete语句). <br/> 
	 * TODO(这里描述这个方法适用条件 – 可选).<br/> 
	 * TODO(这里描述这个方法的执行流程 – 可选).<br/> 
	 * TODO(这里描述这个方法的使用方法 – 可选).<br/> 
	 * TODO(这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author E052535 
	 * @param builder
	 * @return
	 */
	@TinyBuilderOperation(name = "exec")
	public int exec(SqlBuilder<T> builder);
	
	/**
	 * 
	 * selectOne:(用于链式方式生成sql语句，针对select一条结果集记录). <br/> 
	 * TODO(这里描述这个方法适用条件 – 可选).<br/> 
	 * TODO(这里描述这个方法的执行流程 – 可选).<br/> 
	 * TODO(这里描述这个方法的使用方法 – 可选).<br/> 
	 * TODO(这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author E052535 
	 * @param builder
	 * @return
	 */
	@TinyBuilderOperation(name = "selectOne")
	public T selectOne(SqlBuilder<T> builder);
	

	/**
	 * 
	 * selectCount:(用于链式方式生成sql语句，获取记录行数). <br/> 
	 * TODO(这里描述这个方法适用条件 – 可选).<br/> 
	 * TODO(这里描述这个方法的执行流程 – 可选).<br/> 
	 * TODO(这里描述这个方法的使用方法 – 可选).<br/> 
	 * TODO(这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author E052535 
	 * @param builder
	 * @return
	 */
	@TinyBuilderOperation(name = "selectCount")
	public Long selectCount(SqlBuilder<T> builder);
	
	/**
	 * 
	 * select:(用于链式方式生成sql语句，针对select多条结果集记录). <br/> 
	 * TODO(这里描述这个方法适用条件 – 可选).<br/> 
	 * TODO(这里描述这个方法的执行流程 – 可选).<br/> 
	 * TODO(这里描述这个方法的使用方法 – 可选).<br/> 
	 * TODO(这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author E052535 
	 * @param builder
	 * @return
	 */
	@TinyBuilderOperation(name = "select")
	public List<T> select(SqlBuilder<T> builder);
	
	/**
	 * 
	 * selectPage:(用于链式方式生成sql语句，针对分页结果集记录). <br/> 
	 * TODO(这里描述这个方法适用条件 – 可选).<br/> 
	 * TODO(这里描述这个方法的执行流程 – 可选).<br/> 
	 * TODO(这里描述这个方法的使用方法 – 可选).<br/> 
	 * TODO(这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author E052535 
	 * @param builder
	 * @return
	 */
	@TinyBuilderOperation(name = "selectPage")
	public ResultColumnArrayList<T> selectPage(SqlBuilder<T> builder);
	
}
